<?xml version="1.0" encoding="utf-8" ?>
<workflow.net.activity>
	<version number="1.9"/>
	<operatortypes>
		<operatortype name="greaterthan">
			<display>
				<![CDATA[>]]>
			</display>
			<dbvalue>
				<![CDATA[>]]>
			</dbvalue>
		</operatortype>
		<operatortype name="lessthan">
			<display>
				<![CDATA[<]]>
			</display>
			<dbvalue>
				<![CDATA[<]]>
			</dbvalue>
		</operatortype>
		<operatortype name="greaterthanandequalto">
			<display>
				<![CDATA[>=]]>
			</display>
			<dbvalue>
				<![CDATA[>=]]>
			</dbvalue>
		</operatortype>
		<operatortype name="lessthanandequalto">
			<display>
				<![CDATA[<=]]>
			</display>
			<dbvalue>
				<![CDATA[<=]]>
			</dbvalue>
		</operatortype>
		<operatortype name="in">
			<display>
				<![CDATA[In]]>
			</display>
			<dbvalue>
				<![CDATA[in]]>
			</dbvalue>
		</operatortype>
		<operatortype name="contains">
			<display>
				<![CDATA[Contains]]>
			</display>
			<dbvalue>
				<![CDATA[Like]]>
			</dbvalue>
		</operatortype>
		<operatortype name="notin">
			<display>
				<![CDATA[Not In]]>
			</display>
			<dbvalue>
				<![CDATA[not in]]>
			</dbvalue>
		</operatortype>
		<operatortype name="notequalto">
			<display>
				<![CDATA[<>]]>
			</display>
			<dbvalue>
				<![CDATA[<>]]>
			</dbvalue>
		</operatortype>
		<operatortype name="equalto">
			<display>
				<![CDATA[=]]>
			</display>
			<dbvalue>
				<![CDATA[=]]>
			</dbvalue>
		</operatortype>
	</operatortypes>
	<columns width="100%">
	<!-- Mapped to a column name. -->
	
		<uniquerowidentifier name="ActivityId"/>
		<column name="PIName"					type="string"		query="P.Title"			queryas="ProtocolTitle"	     displayas="PI Name"			display="false" 		cansort="true" displaywidth="15%"></column>	
		<column name="ProtocolProcessName"		type="string"		query="PP.Name"			queryas="ProtocolName"	     displayas="Protocol Name"			display="false" 		cansort="true" displaywidth="15%"></column>	
		<column name="ProtocolProcessTitle"		type="string"		query="P.Title"		queryas="ProtocolTitle"	     displayas="Protocol Title"			display="false" 		cansort="true" displaywidth="15%"></column>
		<column name="PIFirstName"			type="string"		query="ADMP.FirstName"		queryas="PIFirstName"	     displayas="PIFirstName"			display="false" 		cansort="true" displaywidth="15%"></column>
		<column name="PILastName"		type="string"		query="ADMP.LastName"		queryas="PILastName"	     displayas="PILastName"			display="false" 		cansort="true" displaywidth="15%"></column>
		<column name="ProtocolProcessTypeCode"		type="string"		query="PP.Type"			queryas="TypeCode"	     displayas="TypeCode"					display="false" 		cansort="true" displaywidth="15%"></column>
    		<column name="ProtocolProcessType"		type="string"		query="rfc.RefMeaning"			queryas="Type"	     displayas="Type"					display="true" 		cansort="true" displaywidth="20%"></column>
		<column name="ActivityId"		type="int"	query="SWA.Id"			queryas="ActivityId"	 displayas="#Ref"		  display="false"	cansort="false"  displaywidth="5%"></column>
		<column name="ActivityId"		type="int"	query="P.Id"			queryas="ProtocolId"	 displayas="ProtocolId"		  display="false"	cansort="false"  displaywidth="5%"></column>
		<column name="ExecutionId"		type="int"	query="SWA.ExecutionId"		queryas="ExecutionId"	 displayas="ExecutionId"	  display="false" 	cansort="true"  displaywidth=""></column>
		<column name="ActionRequired"		type="string"	query="SWA.ActionRequired"	queryas="ActionRequired" displayas="Action Required"  	  display="true" 	cansort="true"  displaywidth="60%"></column>
		<column name="Subject"			type="string"   query="SWL.CharData"		queryas="Subject"	 displayas="Subject"		  display="false" 	cansort="false" displaywidth="25%"></column>
		<column name="SubmittedBy"		type="resource" query="SWA.SubmittedBy"		queryas="SubmittedBy"	 displayas="Submitted By"	  display="false" 	cansort="true"  displaywidth="15%"></column>
		<column name="ResponseBy"		type="datetime" query="SWA.ResponseBy"		queryas="ResponseBy"	 displayas="Response Date"	  display="false" 	cansort="true"  displaywidth="20%"></column>
		<column name="Severity"			type="string"   query="SWA.Severity"		queryas="Severity"	 displayas="Urgency"		  display="false" 	cansort="true"  displaywidth="5%"></column>
		<column name="AssignedOn"		type="datetime" query="SWA.AssignedOn"		queryas="AssignedOn"	 displayas="Assigned On"	  display="true" 	cansort="true"  displaywidth="20%" searchbuildertype ="subquery">
			<!--If value is set as userset then , This subquery will be evaluvated against the operator to fetch the query for search, 
			also the AssignedOn (column name) will be available  in the value collection for the value entered by user
			If operator is set as userset, Then the operator will be passed to the value collection as Operator
			type attribute is used to distinquish between parent query and child query-->
			<subquery name="AssigneOnSubquery" value="userset" operator="userset">
				<query name="filtercondition" type="subquery">
					<!--
						The sub query option is provided, if the search query cannot be built on a particular db field.
						The positions that can be provided are "fields" or "end".
						The queryname will always be filtercondition.
					-->
					<add action="append" position="fields">
						<datasource type="Default">
							<![CDATA[ dateDiff(dd,]]>
							<value selectvalue="AssignedOn" format="datetime"/>
						</datasource>
						<datasource type="sql server">
							<![CDATA[ dateDiff(dd,]]>
							<value selectvalue="AssignedOn" format="datetime"/>
						</datasource>
						<datasource type="oracle oledb">
							<![CDATA[ trunc(SWA.AssignedOn+(]]>
							<value selectvalue="datecorrectionfactor" format="timespaninminutes"/>
						</datasource>
						<datasource type="access oledb">
							<![CDATA[ dateDiff("d",]]>
							<value selectvalue="AssignedOn" format="datetime"/>
						</datasource>
					</add>							
					<add action="append" position="fields">
						<datasource type="Default">
							<![CDATA[ ,dateadd(mi,]]>
							<value selectvalue="datecorrectionfactor" format="timespaninminutes"/>
						</datasource>
						<datasource type="sql server">
							<![CDATA[ ,dateadd(mi,]]>
							<value selectvalue="datecorrectionfactor" format="timespaninminutes"/>
						</datasource>
						<datasource type="oracle oledb">
							<![CDATA[ /60)/24) <bookmark name="replaceoperator"/> trunc(TO_DATE(TO_CHAR( ]]>
							<value selectvalue="AssignedOn" format="datetime"/>
						</datasource>
						<datasource type="access oledb">
							<![CDATA[ ,dateadd("n",]]>
							<value selectvalue="datecorrectionfactor" format="timespaninminutes"/>
						</datasource>
					</add>							
					<add action="append" position="fields">
						<datasource type="Default">
							<![CDATA[ ,SWA.AssignedOn)) <bookmark name="replaceoperator"/>  0 ]]>
						</datasource>
						<datasource type="sql server">
							<![CDATA[ ,SWA.AssignedOn)) <bookmark name="replaceoperator"/>  0 ]]>
						</datasource>
						<datasource type="oracle oledb">
							<![CDATA[ ,'MM/DD/YYYY'),'MM/DD/YYYY')) ]]>
						</datasource>								
					</add>
					<add action="replace" position="replaceoperator" type="bookmark">
						<value selectvalue="Operator" format="operator"/>
					</add>							
				</query>
			</subquery>
		</column>
		<column name="ExecutionDetailsId" type="int"		query="SWA.ExecutionDetailsId"	queryas="ExecutionDetailsId" displayas=""						display="false" 	cansort="true" displaywidth=""></column>
		<column name="TimeOutForActivity" type="string"		query="SWA.TimeOutForActivity"	queryas="TimeOutForActivity" displayas=""						display="false" 	cansort="true" displaywidth=""></column>
		<column name="BusinessHrFlag"	  type="string"		query="SWA.BusinessHrFlag"		queryas="BusinessHrFlag"     displayas=""						display="false" 	cansort="true" displaywidth=""></column>
		<column name="Workflow"			  type="string"		query="SWA.WorkFlowType"		queryas="Workflow"			 displayas="Workflow" 				display="false" 		cansort="true" displaywidth="15%"></column>		
		<column name="InternalStatus"	  type="string"		query="SWE.InternalStatus"		queryas="InternalStatus"     displayas="Internal Status"		display="false"		cansort="true" displaywidth="15%"></column>
		<!--Column display will be switched on if the DisplayTasksOfAllUsers property is set as true  for activitylist-->
		<column name="AssignedTo"		  type="resource"	query="SWA.VirtualUserId"		queryas="AssignedTo"	     displayas="AssignedTo"				display="false" 	cansort="true" displaywidth="15%"></column>
		<!--Since the columns are internally mapped the query tag should be provided only with the SWActivityCustomFields table table alias name
		if displayas is not set then the field added wat design  time will be considered
		<column name="Customfield"	type="customfield" queryas="Testing1"  	display="true" cansort="true" displaywidth="15%"></column>-->
	</columns>
	<activityquery>
		<query name="activityquery">
			<add action="append" position="from">
				<datasource type="default">
					<![CDATA[ (((((((((SWActivityList SWA With (nolock)
						Left Outer Join SWLong SWL With (nolock) ON SWL.Id = SWA.Subject)
						Left Outer Join SWActivityCustomFields SWAC With (nolock) ON SWAC.ActivityId = SWA.Id)
						LEFT Outer JOIN ProtocolProcess_WorkFlow_Map PPW With (nolock) ON SWA.ExecutionId = PPW.ExecutionId)
						LEFT Outer JOIN ProtocolProcess PP With (nolock) ON PP.Id = PPW.ProtocolProcessId)
						LEFT Outer JOIN Protocol P with (nolock) ON PP.ProtocolID = P.ID)
            				LEFT  JOIN RefCode rfc With (nolock) ON rfc.[RefCode] = pp.Type)
						INNER JOIN SWExecutionDetails SWED With (nolock) ON SWED.Id = SWA.ExecutionDetailsId) 
						INNER JOIN SWExecute SWE With (nolock) ON SWE.Id = SWA.ExecutionId)
						LEFT OUTER JOIN AdmPerson ADMP With (nolock) ON ADMP.Id = P.PIPersonId) ]]>						
				</datasource>
				<datasource type="access oledb">
					<![CDATA[ ((((SWActivityList SWA
						Left Outer Join SWLong SWL ON SWL.Id = SWA.Subject)
						Left Outer Join SWActivityCustomFields SWAC ON SWAC.ActivityId = SWA.Id)
						INNER JOIN SWExecutionDetails SWED ON SWED.Id = SWA.ExecutionDetailsId) 
						INNER JOIN SWExecute SWE ON SWE.Id = SWA.ExecutionId) ]]>
				</datasource>	
				<datasource type="oracle oledb">
					<![CDATA[ SWActivityList SWA ,SWLong SWL, SWExecute SWE, SWExecutionDetails SWED, SWActivityCustomFields SWAC  ]]>
				</datasource>					
				
			</add>
			<add action="append" position="where" >
				<datasource type="default">
					<![CDATA[ SWE.InternalStatus in ('SL','FN') AND SWA.Status in ('awaiting','acknowledged','information') 
					AND SWE.Application = ]]>
					<value selectvalue="application" format="string" />
				</datasource>	
				<datasource type="oracle oledb">
					<![CDATA[ 
						SWL.Id = SWA.Subject (+)
						AND SWA.Id = SWAC.ActivityId (+)
						AND SWE.Id = SWA.ExecutionId
						AND SWED.Id = SWA.ExecutionDetailsId
						AND SWE.InternalStatus in ('SL','FN')
						AND SWA.Status in ('awaiting','acknowledged','information') 
						AND SWE.Application =
					 ]]>
					<value selectvalue="application" format="string" />
				</datasource>
			</add>
			<!--
				The query for workflow selection is also passed as value ,
				The activitycontrol has an option to set WF's . if WF's are set then the 
				Value will be passed as AND SWE.Name in ('workflowname')
				If format is query then the value passed is directly replaced in the query.				
			-->
			<add action="append" position="fields" >				
				<value selectvalue="workflow" format="query" />
			</add>
			<add action="append" position="fields">
					<![CDATA[ AND SWA.Id In ( ]]>
			</add>
			<!--Type is set as query when a filterquery has to be added to the parent query-->
			<add action="append" position="fields" type="query" name="filtercondition">
			</add>
			<add action="append" position="fields">
					<![CDATA[ ) ]]>
			</add>
			<add action="append" position="fields" >
				<value selectvalue="virtualuseridquery" format="query" />
			</add>
			<add action="append" position="fields" >
				<value selectvalue="baseactivityfilter" format="query" />
			</add>
			<add action="append" position="end">
				<![CDATA[ ORDER BY ]]>				
				<value selectvalue="orderby" format="query" />
			</add>
			<!-- This query is executed and distinct activity id is used for paging.
			type attribute is used to distinquish between parent query and child(filter) query 
			The sorting fields needs to be mapped here,for example to perfoem a search on AssignedOn field. we need to 
			append that in the select statement. 
			-->
			<!--<![CDATA[ Distinct SWA.Id, SWA.ActionRequired, SWA.SubmittedBy, SWA.ResponseBy, SWA.Severity, SWA.AssignedOn, SWA.WorkFlowType, ADMP.FirstName, ADMP.LastName ]]>-->
			<query name="filtercondition" type="subquery">
				<add action="append" position="select">					
					<![CDATA[ Distinct SWA.Id ]]>
				</add>
				<add action="append" position="from">
					<datasource type="default">
						<![CDATA[ (((((((SWActivityList SWA	With (nolock)
							Left Outer Join SWActivityCustomFields SWAC With (nolock) ON SWAC.ActivityId = SWA.Id)
							INNER JOIN SWExecutionDetails SWED With (nolock) ON SWED.Id = SWA.ExecutionDetailsId) 
							INNER JOIN SWExecute SWE With (nolock) ON SWE.Id = SWA.ExecutionId)
							LEFT Outer JOIN ProtocolProcess_WorkFlow_Map PPW With (nolock) ON SWA.ExecutionId = PPW.ExecutionId)
							LEFT Outer JOIN ProtocolProcess PP With (nolock) ON PP.Id = PPW.ProtocolProcessId)
							LEFT Outer JOIN Protocol P with (nolock) ON PP.ProtocolID = P.ID)
							LEFT OUTER JOIN AdmPerson ADMP With (nolock) ON ADMP.Id = P.PIPersonId) ]]>
					</datasource>
					<datasource type="access oledb">
						<![CDATA[ (((SWActivityList SWA
							Left Outer Join SWActivityCustomFields SWAC ON SWAC.ActivityId = SWA.Id)
							INNER JOIN SWExecutionDetails SWED ON SWED.Id = SWA.ExecutionDetailsId) 
							INNER JOIN SWExecute SWE ON SWE.Id = SWA.ExecutionId) ]]>
					</datasource>					
					<datasource type="oracle oledb">
						<![CDATA[ SWActivityList SWA ,SWExecute SWE, SWExecutionDetails SWED, SWActivityCustomFields SWAC  ]]>
					</datasource>				
				</add>
				<add action="append" position="where" >
					<datasource type="default">
						<![CDATA[ SWE.InternalStatus in ('SL','FN') AND SWA.Status in ('awaiting','acknowledged','information') 
						AND SWE.Application = ]]>
						<value selectvalue="application" format="string" />
					</datasource>	
					<datasource type="oracle oledb">
						<![CDATA[ 
							SWA.Id = SWAC.ActivityId (+)
							AND SWE.Id = SWA.ExecutionId
							AND SWED.Id = SWA.ExecutionDetailsId
							AND SWE.InternalStatus in ('SL','FN')
							AND SWA.Status in ('awaiting','acknowledged','information') 
							AND SWE.Application =
						]]>
						<value selectvalue="application" format="string" />
					</datasource>
				</add>				
				<!--
					The query for workflow selection is also passed as value ,
					The activitycontrol has an option to set WF's . if WF's are set then the 
					Value will be passed as AND SWE.Name in ('workflowname')
					If fromat is query then the value passed is directly replaced in the query
				-->
				<add action="append" position="fields" >
					<value selectvalue="workflow" format="query" />
				</add>			
				<add action="append" position="fields" >
					<value selectvalue="virtualuseridquery" format="query" />
				</add>
				<add action="append" position="fields" >
					<value selectvalue="baseactivityfilter" format="query" />
				</add>
				<!--While using API's the OrderBy clause is ignored because the subquery will give exception-->
				<add action="append" position="end">
					<![CDATA[ ORDER BY ]]>
					<value selectvalue="orderby" format="query" />
				</add>
			</query>
		</query>
	</activityquery>
	<!--Query used to get the total record count, Used for paging purpose.-->
	<recordcountquery>
	  <query name="recordcountquery">
	   <add action="append" position="select"> 
	   <datasource type="default">
	    <![CDATA[ count(distinct SWA.Id) ]]>
	   </datasource>
	   <datasource type="access oledb">
	    <![CDATA[ count(S.TotalCount)
	    FROM [ SELECT Distinct SWA.ID as TotalCount 
	    ]]>
	    </datasource>
	   </add>
	   <add action="append" position="from">
	    <datasource type="default">
	     <![CDATA[ (((((((SWActivityList SWA With (nolock)      
	      Left Outer Join SWActivityCustomFields SWAC With (nolock) ON SWAC.ActivityId = SWA.Id)
	      INNER JOIN SWExecutionDetails SWED With (nolock) ON SWED.Id = SWA.ExecutionDetailsId) 
	      INNER JOIN SWExecute SWE With (nolock) ON SWE.Id = SWA.ExecutionId) 
		LEFT Outer JOIN ProtocolProcess_WorkFlow_Map PPW With (nolock) ON SWA.ExecutionId = PPW.ExecutionId)
							LEFT Outer JOIN ProtocolProcess PP With (nolock) ON PP.Id = PPW.ProtocolProcessId)
							LEFT Outer JOIN Protocol P with (nolock) ON PP.ProtocolID = P.ID)
							LEFT OUTER JOIN AdmPerson ADMP With (nolock) ON ADMP.Id = P.PIPersonId) ]]>
	    </datasource>
	    <datasource type="oracle oledb">
	     <![CDATA[ SWActivityList SWA ,SWExecute SWE, SWExecutionDetails SWED, SWActivityCustomFields SWAC  ]]>
	    </datasource> 
	    
	    <datasource type="access oledb">
	     <![CDATA[ (((SWActivityList SWA      
	     Left Outer Join SWActivityCustomFields SWAC ON SWAC.ActivityId = SWA.Id)
	     INNER JOIN SWExecutionDetails SWED ON SWED.Id = SWA.ExecutionDetailsId) 
	     INNER JOIN SWExecute SWE ON SWE.Id = SWA.ExecutionId) ]]>
	    </datasource>
	   </add>
	   <add action="append" position="where" >
	    <datasource type="default">
	     <![CDATA[ SWE.InternalStatus in ('SL','FN') AND SWA.Status in ('awaiting','acknowledged','information') 
	     AND SWE.Application = ]]>
	     <value selectvalue="application" format="string" />
	    </datasource> 
	    <datasource type="oracle oledb">
	     <![CDATA[ 
	      SWA.Id = SWAC.ActivityId (+) 
	      AND SWE.Id = SWA.ExecutionId
	      AND SWED.Id = SWA.ExecutionDetailsId
	      AND SWE.InternalStatus in ('SL','FN')
	      AND SWA.Status in ('awaiting','acknowledged','information') 
	      AND SWE.Application =
	     ]]>
	     <value selectvalue="application" format="string" />
	    </datasource>
	    <datasource type="access oledb">
	    <![CDATA[ SWE.InternalStatus in ('SL','FN') AND SWA.Status in ('awaiting','acknowledged','information') 
	    AND SWE.Application = ]]>
	    <value selectvalue="application" format="string" />
	    </datasource>
	   </add>
	   <!--
	    The query for workflow selection is also passed as value ,
	    The activitycontrol has an option to set WF's . if WF's are set then the 
	    Value will be passed as AND SWE.Name in ('workflowname')
	    If fromat is query then the value passed is directly replaced in the query
	   -->
	   <add action="append" position="fields" >
	    <value selectvalue="workflow" format="query" />
	   </add>
	   <add action="append" position="fields" >
	    <value selectvalue="virtualuseridquery" format="query" />
	   </add>
	   <add action="append" position="fields" >
	    <value selectvalue="baseactivityfilter" format="query" />
	   </add>
	   <add action="append" position="end" >
	       <datasource type="access oledb">
	        <![CDATA[  ]. AS S ]]>
	       </datasource> 
	   </add>
	  </query>
 	</recordcountquery>
	<!--<searchfields name="Workitem ref#" >
		
			searchfield is used to identify the column on which the search has to be done.
			It has to be a field that comes under the columns.
			If Workitem is selected in query builder then the search query will be  
			SWA.Id  = 1. 
		
		<searchfield name="ActivityId"/>
		<operators operatornames="equalto,greaterthan,lessthan,greaterthanandequalto,lessthanandequalto,notequalto" />
		<fields>			
			<field display="Value" value="Value">
				<value type="text" displaytype="text" fromdb="false"></value>
			</field>		
		</fields>	
	</searchfields>-->
	<!--<searchfields name="Severity" >	
		<searchfield name="Severity"/>
		<operators operatornames="equalto,notequalto,contains" />
		<fields>			
			<field display="Severity" value="SeverityStatus">
				<value type="rows" displaytype="dropdown" fromdb="false">
					<row display="High" value="High" />
					<row display="Medium" value="Medium" />
					<row display="Low" value="Low" />
				</value>
			</field>
		</fields>
	</searchfields>-->
	<searchfields name="PIFirstName" >
		<searchfield name="PIFirstName"/>
		<operators operatornames="equalto,notequalto" />
		<fields>
			<field display="Value" value="Value">
				<value type="text" displaytype="text" fromdb="true" />	   	 	
			</field>			
		</fields>
	</searchfields>
	<searchfields name="PILastName" >
		<searchfield name="PILastName"/>
		<operators operatornames="equalto,notequalto" />
		<fields>
			<field display="Value" value="Value">
				<value type="text" displaytype="text" fromdb="true" />	   	 	
			</field>			
		</fields>
	</searchfields>
	<searchfields name="Assigned On" >
		<searchfield name="AssignedOn"/>
		<operators operatornames="equalto,notequalto,greaterthan,lessthan,greaterthanandequalto,lessthanandequalto" />			
		<fields>
			<field display="Date Time" value="DateTime">
				<value type="datetime" displaytype="datetime" fromdb="false" displaystring="MM/DD/YYYY">					
				</value>
			</field>
		</fields>
	</searchfields>
	<searchfields name="Action Required" >
		<searchfield name="ActionRequired"/>
		<operators operatornames="in,notin,contains" />
		<fields>
			<field display="Value" value="Value">
				<value type="text" displaytype="text" fromdb="false" />
			</field>
			<field display="Actions" value="ActionName">
				<value type="query" displaytype="dropdown"  fromdb="true">
					<query>
						<add action="append" position="select">
							<![CDATA[DISTINCT ActionRequired as SelectDisplay,ActionRequired as SelectValue]]>
						</add>
						<add action="append" position="from">
							<![CDATA[ SWActivityList ]]>
						</add>
						<add action="append" position="where">
							<![CDATA[ ActionRequired is not null ]]>
						</add>
						<add action="append" position="fields" >
							<![CDATA[ AND VirtualUserId =  ]]>
							<value selectvalue="virtualuserid" format="int" />
						</add>					
						<add action="append" position="end">
							<![CDATA[ Order BY ActionRequired ]]>
						</add>
					</query>						
				</value>
			</field>
		</fields>
	</searchfields>
	<searchfields name="Assigned By" >
		<searchfield name="SubmittedBy"/>
		<operators operatornames="equalto,notequalto" />
		<fields>
			<field display="Resource" value="Resource">
				<value type="resource" displaytype="resource" fromdb="false"></value>
			</field>			
		</fields>
	</searchfields>	
	<!--<searchfields name="InternalStatus" >   	
	    <searchfield name="InternalStatus"/>
	    <operators operatornames="equalto,notequalto,contains" />
	    <fields>
	    	<field display="Value" value="Value">
			<value type="text" displaytype="text" fromdb="false" />
	   	 </field>	    	
	    </fields>
	</searchfields>-->
</workflow.net.activity>